I. Wzorce kreacyjne
1. Singleton
2. Budowniczy
3. Prototyp
4. Fabryka
5. Fabryka abstrakcyjna
II. Wzorce strukturalne
1. Adapter
2. Most
3. Kompozyt
4. Dekorator
5. Fasada
6. Pyłek
7. Pełnomocnik
III. Wzorce czynnościowe
1. Łańcuch zobowiązań
2. Polecenie
3. Interpreter
4. Iterator
5. Mediator
6. Pamiątka
7. Obserwator
8. Stan
9. Strategia
10. Metoda szablonowa
11. Odwiedzający

Most (Bridge) - wzorzec projektowy (design pattern) - java

1. Cel:
Wzorzec projektowy most (bridge) oddziela abstrakcję od jej implementacji, tak aby obie mogły się zmieniać niezależnie.
Adapter działa na starym kodzie, gdzie Bridge jest tworzony podczas projektowania systemu.
Wzorzec ten zmienia z 'is a relation' na 'has a relation'.

2. Problem:
Mamy TV do którego jest przydzielony pilot. Chcemy dodać pilot który będzie działał na każdym telewizorze.

3. Rozwiązanie:
Używamy kompozycji przy tworzeniu pilota przekazując TV, który działa niezależnie od pilota.
Późniejsze zmiany w klasie TV nie wpływają na działanie pilota.

4. Diagram klas wzorca Bridge:


5. Implementacja:

Interface urządzenia:
  1. public interface Device {
  2.         boolean isEnabled()
  3.         void enable();
  4.         void disable();
  5.         int getVolume();
  6.         void setVolume(int valume);
  7.         int getChannel();
  8.         void setChannel(int channel);
  9.         void printDetails();
  10. }
  11.  

Implementacja interfejsu urządzenia:
  1. public class Radio implements Device {
  2.     private boolean enabled = false;
  3.     private int volume = 5;
  4.     private int channel = 1;
  5.  
  6.     @Override
  7.     public boolean isEnabled() {
  8.         return enabled;
  9.     }
  10.  
  11.     @Override
  12.     public void enable() {
  13.         enabled = true;
  14.     }
  15.  
  16.     @Override
  17.     public void disable() {
  18.         enable = false;
  19.     }
  20.  
  21.     @Override
  22.     public int getVolume() {
  23.         return volume;
  24.     }
  25.  
  26.     @Override
  27.     public void setVolume(int volume) {
  28.         if (volume > 10) {
  29.             this.volume = 10;
  30.         } else if (volume < 0) {
  31.             this.volume = 0;
  32.         } else {
  33.             this.volume = volume;
  34.         }
  35.     }
  36.  
  37.     @Override
  38.     public int getChannel() {
  39.         return channel;
  40.     }
  41.        
  42.     @Override
  43.     public void setChannel(int channel) {
  44.         if (channel > 100) {
  45.             this.volume = 100;
  46.         } else if (volume < 0) {
  47.             this.channel = 0;
  48.         } else {
  49.             this.channel = channel;
  50.         }
  51.     }
  52.  
  53.     @Override
  54.     public void printDetails() {
  55.        System.out.println("It's radio");
  56.        System.out.println("Radio is " + (enabled ? "enabled" : "disabled"));
  57.        System.out.println("Radio volume is " + volume + "%");
  58.        System.out.println("Radio channel is " + channel);
  59.     }
  60. }
  61.  
  62.  
  63. public class TV implements Device {
  64.     private boolean enabled = false;
  65.     private int volume = 5;
  66.     private int channel = 1;
  67.  
  68.     @Override
  69.     public boolean isEnabled() {
  70.         return enabled;
  71.     }
  72.  
  73.     @Override
  74.     public void enable() {
  75.         enabled = true;
  76.     }
  77.  
  78.     @Override
  79.     public void disable() {
  80.         enable = false;
  81.     }
  82.  
  83.     @Override
  84.     public int getVolume() {
  85.         return volume;
  86.     }
  87.  
  88.     @Override
  89.     public void setVolume(int volume) {
  90.         if (volume > 10) {
  91.             this.volume = 10;
  92.         } else if (volume < 0) {
  93.             this.volume = 0;
  94.         } else {
  95.             this.volume = volume;
  96.         }
  97.     }
  98.  
  99.     @Override
  100.     public int getChannel() {
  101.         return channel;
  102.     }
  103.        
  104.     @Override
  105.     public void setChannel(int channel) {
  106.         if (channel > 100) {
  107.             this.volume = 100;
  108.         } else if (volume < 0) {
  109.             this.channel = 0;
  110.         } else {
  111.             this.channel = channel;
  112.         }
  113.     }
  114.  
  115.     @Override
  116.     public void printDetails() {
  117.        System.out.println("It's TV");
  118.        System.out.println("TV is " + (enabled ? "enabled" : "disabled"));
  119.        System.out.println("TV volume is " + volume + "%");
  120.        System.out.println("TV channel is " + channel);
  121.     }
  122. }
  123.  
  124.  

Interface pilota:
  1. public interfaceRemote{
  2.         void power();
  3.         void ValumeUp();
  4.         void VolumeDown();
  5.         void channelUp();
  6.         void channelDown();
  7.         void printDetails();
  8. }
  9.  

Implementacja pilota:
  1. public class RemoteController implements Remote {
  2.         private Device device;
  3.        
  4.         public RemoteController(Device device) {
  5.                 this.device = device;
  6.         }
  7.        
  8.         @Override
  9.         public void power() {
  10.                 if (device.isEnabled()) {
  11.                         device.disable();
  12.                 } else {
  13.                         device.enable();
  14.                 }
  15.         }
  16.  
  17.         @Override
  18.         public void volumeUp() {
  19.                 device.setVolume(device.getVolume() + 1);
  20.         }
  21.  
  22.         @Override
  23.         public void volumeDown() {
  24.                 device.setVolume(device.getVolume() - 1);
  25.         }
  26.        
  27.         @Override
  28.         public void channelUp() {
  29.                 device.setChannel(device.getChannel() + 1);
  30.         }
  31.  
  32.         @Override
  33.         public void channelDown() {
  34.                 device.setChannel(device.getChannel() - 1);
  35.         }
  36.        
  37.         @Override
  38.         public void printDetails() {
  39.                 device.printDetails();
  40.         }
  41. }
  42.  
  43.  

i klasa testująca:
  1. public class RemoteControllerTest {
  2.         public static void main(String[] arg) {
  3.                 System.out.println("Radio Test:");
  4.                 Remote rc = new RemoteController(new Radio());
  5.                 rc.power();
  6.                 rc.channelUp();
  7.                 rc.channelUp();
  8.                 rc.channelUp();
  9.                 rc.volumeUp();
  10.                 rc.volumeUp();
  11.                 rc.printDetails();
  12.                 System.out.println("TV Test:");
  13.                 Remote rc = new RemoteController(new TV());
  14.                 rc.power();
  15.                 rc.channelUp();
  16.                 rc.volumeDown();
  17.                 rc.volumeDown();
  18.                 rc.printDetails();
  19.         }
  20. }


Wynikiem programu jest:
Radio Test:
It's radio
Radio is enabled
Radio volume is 7
Radio channel is 4
TV Test:
It's TV
TV is enabled
TV volume is 3
TV channel is 2


6. Zastosowanie w kodzie java:
- AWT - dostarcza abstrakcji która mapuje do native OS okna.
- JDBC
created by cv.java.org.pl © 2023 All Rights Reserved.